叠加分析 Sample详情
最后更新时间:2020年12月11日
叠加分析是地理信息系统最常用的提取空间隐含信息的手段之一。该方法源于传统的透明材料叠加,即将来自不同的数据源的图纸绘于透明纸上,在透光桌上将其叠放在一起,然后用笔勾出感兴趣的部分或提取出感兴趣的信息。
地理信息系统的叠加分析是将有关主题层组成的数据层面进行叠加,产生一个新的数据层面的操作,其结果是原来的要素被分割、剪断、套合,然后生成新的要素,新要素综合了原来两层要素所具有的属性。也就是说,空间叠加,不仅产生新的空间特征,还将实体的属性联接起来,产生新的属性。借助叠加分析可以进行空间数据相交、求并、相减等多种空间分析操作。
在此,主要介绍针对几何要素的叠加分析计算。空间叠加分析涉及到一系列的运算,现将叠加运算总结为以下五种类型:点对区运算、线对区运算、区对区运算、点对线运算、区对点运算。每种类型对应一定的逻辑运算,生成的结果也不尽相同,如下表所示:
分析类型 | 叠加分析功能 | 结果 |
---|---|---|
点对区 | 相交、相减 | 点简单要素类 |
线对区 | 相交、相减、求并、判别 | 线简单要素类 |
区对区 | 相交、相减、求并、判别、对称差 | 区简单要素类 |
点对线 | 相交 | 点简单要素类 |
区对点 | 相交、相减 | 区简单要素类 |
下方图片以区和区的叠加分析展示了求交、求并、相减、求对称差的功能作用。
针对几何要素的空间关系分析计算,主要通过API程序包com.zondy.mapgis.geometry下的GeometryOperator类接口实现:
接口 | 说明 |
---|---|
GeometryOperator.equals() | 相同 |
GeometryOperator.crosses() | 穿越相交 |
GeometryOperator.contains() | 包含 |
GeometryOperator.covers() | 覆盖 |
GeometryOperator.coveredBy() | 被覆盖 |
GeometryOperator.disjoint() | 相离 |
GeometryOperator.intersects() | 相交 |
GeometryOperator.touches() | 相接 |
GeometryOperator.difference() | 求差 |
GeometryOperator.intersection() | 求交 |
GeometryOperator.symDifference() | 求对称差 |
GeometryOperator.union() | 求并 |
GeometryOperator.within() | 点在区内 |
在进行以下空间逻辑运算之前,首先需要根据对应的接口准备待分析的几何对象。类似缓冲分析中几何对象的获取方法,可以通过地图要素查询从Feature中获取Geometry;也可以先绘制图形,然后转换为Geometry;还可以直接根据坐标数据构建Geometry。其中查询方式最常用。在此不展开讲述,可以参考缓冲分析部分的文档。
具体实现方法如下:
即求两个数据集的交集的操作,两个数据集中相交的部分被保存到结果数据集中,其余部分被排除。
// 两个区几何要素求交得到交集 Geometry geoIntersection = GeometryOperator.intersection(geometryA, geometryB, mTolerance);
求两个数据集的并集的操作,用“输入几何对象”将“被求并几何对象”打散,分开为多个元素,然后将所有要素信息全部记录到结果数据中。简单地说,如果求并的是两个有相交区域的区要素,结果为3个图元:相交部分、裁剪掉相交区域的原始两图元。
// 两个区几何要素求并得到并集 Geometry geometryUnion = GeometryOperator.union(geoPolygonA, geoPolygonaB, mTolerance);
相减,即从几何对象A中“减去”与几何对象B相重叠的部分。
// 两个几何对象求差值 Geometry geoDifference = GeometryOperator.difference(geometryA, geometryB, mTolerance);
对称差即获取数据集A与叠加数据集B相交图元以外的部分。
// 两个几何对象求对称差 Geometry geoSymmetricDifference = GeometryOperator.symDifference(geometryA, geometryB, mTolerance);
分割操作,只能用线对象对区或线几何对象进行分割。
// 分割区(画线分割区) ArrayListgeoSplit = new ArrayList (); GeometryOperator.splitPolygonByLine(geometryB, (GeoLine) geometryA, mTolerance, geoSplit);
与求并操作不同的是,合并是将两个对象合并为一个对象。
// 合并两个几何对象 Geometry geoMerge = GeometryOperator.dissolve(geometryA, geometryB, mTolerance);
说明:上述的针对要素的各种空间叠加分析计算,都是对两个几何对象的操作,接口中需要传入两个几何对象,其中第一个参数的对象表示被分析的对象,第二个参数是用来分析的对象。例如相减difference接口中第一个几何对象是被“减去”的,第二个是用来执行“减去”操作的对象。